GtkStyleContext is meant to have a GdkScreen
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 6 Feb 2011 01:40:06 +0000 (02:40 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sun, 6 Feb 2011 10:21:42 +0000 (11:21 +0100)
It is used to get the default providers, without them
the style context can't do much. A check for NULL screen
is done before any sensitive call to
gtk_style_context_set_screen(), in the hope that any widget
will open the display before doing anything related to
styling. Fixes bug #641429, reported by Bastien Nocera.

gtk/gtkstyle.c
gtk/gtkstylecontext.c
gtk/gtkwidget.c

index 5347119ef05cf3e6e5a5ab64d5192afac74ac7c7..1d31d1ef0376894f0723106cacf0e868cf2a66e2 100644 (file)
@@ -822,6 +822,7 @@ _gtk_style_new_for_path (GdkScreen     *screen,
 
   if (screen)
     gtk_style_context_set_screen (context, screen);
+
   gtk_style_context_set_path (context, path);
 
   style = g_object_new (GTK_TYPE_STYLE,
index 6eed378d0eb0767bf2c50e38b566ae06195c3daa..7cd0dab1c1650150bc6b85331b0ebfad38978564 100644 (file)
@@ -2617,7 +2617,7 @@ gtk_style_context_set_screen (GtkStyleContext *context,
   GtkStyleContextPrivate *priv;
 
   g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
-  g_return_if_fail (screen == NULL || GDK_IS_SCREEN (screen));
+  g_return_if_fail (GDK_IS_SCREEN (screen));
 
   priv = context->priv;
   if (priv->screen == screen)
index 74d83f21ce5f5e4aa0aa2186f8a50df0d02adb31..bea97d816bac3e50dba6ae6c2d6fee99c009ed26 100644 (file)
@@ -7738,11 +7738,15 @@ gtk_widget_set_parent (GtkWidget *widget,
 
   if (widget->priv->context)
     {
+      GdkScreen *screen;
+
       _gtk_widget_update_path (widget);
       gtk_style_context_set_path (widget->priv->context, widget->priv->path);
 
-      gtk_style_context_set_screen (widget->priv->context,
-                                    gtk_widget_get_screen (widget));
+      screen = gtk_widget_get_screen (widget);
+
+      if (screen)
+        gtk_style_context_set_screen (widget->priv->context, screen);
     }
 
   gtk_widget_pop_verify_invariants (widget);
@@ -14171,6 +14175,8 @@ gtk_widget_get_style_context (GtkWidget *widget)
 
   if (G_UNLIKELY (!widget->priv->context))
     {
+      GdkScreen *screen;
+
       widget->priv->context = g_object_new (GTK_TYPE_STYLE_CONTEXT,
                                             "direction", gtk_widget_get_direction (widget),
                                             NULL);
@@ -14178,8 +14184,10 @@ gtk_widget_get_style_context (GtkWidget *widget)
       g_signal_connect (widget->priv->context, "changed",
                         G_CALLBACK (style_context_changed), widget);
 
-      gtk_style_context_set_screen (widget->priv->context,
-                                    gtk_widget_get_screen (widget));
+      screen = gtk_widget_get_screen (widget);
+
+      if (screen)
+        gtk_style_context_set_screen (widget->priv->context, screen);
 
       _gtk_widget_update_path (widget);
       gtk_style_context_set_path (widget->priv->context,